'''
学生信息管理系统
要求：
保存姓名，学号，年龄等信息
实现增删查改功能
设计：
1.学生类：
    1）.属性： 姓名、学号、年龄、性别
    2）.方法： 加入班级 退出班级
2. 班级类
    1）.属性： 班级的名称  班级编号  学生列表
    2）.方法： 添加学生 删除学生

3. 管理类
    1）.属性： 系统名称  班级列表
    2）.方法： 增加班级、增学生 、 删 、 改、 查
'''

class Student():
    def __init__(self,name,no,age,sex,cls):
        self.name = name
        self.no = no
        self.age = age
        self.sex = sex
        self.cls = cls
    # 加入班级
    def add_class(self):
        # 加入班级
        self.cls.add_student(self)

    # 退出班级
    def exit_class(self):
        pass
        # 退出班级
        self.cls.del_student(self)

    #编辑学生信息
    def edit_info(self,stu):
        pass


# 班级类
class Cls():
    def __init__(self,clsName,clsNo):
        self.clsName = clsName
        self.clsNo = clsNo
        self.stu_list = []

    # 添加学生
    def add_student(self,stu):
        self.stu_list.append(stu)


    #删除学生
    def del_student(self,no):
        isExistStu = False
        for stu in self.stu_list:
            if stu.no == no:
                isExistStu = True
                self.stu_list.remove(stu)
                break
        if isExistStu ==False:
            print("不存在该学生")

    #编辑学生
    def edit_student(self,no):
        isExistStu = False
        edit_stu =None
        stuIndex = -1
        for stu in self.stu_list:
            if stu.no == no:
                isExistStu = True
                edit_stu =stu
                stuIndex = self.stu_list.index(stu)
        if isExistStu == False:
            print("不存在该学生")
        return isExistStu,edit_stu,stuIndex





        # 管理类
class SysManger():
    def __init__(self,sysName):
        self.sysName = sysName
        self.class_list = []
        self.currentClass = None

    #添加班级
    def add_class(self):
        className = input("请输入班级名称：")
        while self.isExistCls(className) :
            className = input("请重新输入班级名称：")
        classNo = input("请输入班级编号：")
        while self.isExistCls(classNo) :
            classNo = input("请重新输入班级编号：")
        cls = Cls(className,classNo)
        self.class_list.append(cls)

    def isExistCls(self,clsInfo):
        isExistFlage = False
        if len(self.class_list):
            for cl in self.class_list:
                if cl.clsName ==clsInfo:
                    print("该班级名称已存在！")
                    isExistFlage=  True
                    break
                elif cl.clsNo == clsInfo:
                    print("该班级编号已存在！")
                    isExistFlage =True
                    break

        return isExistFlage

    #添加学生
    def add_student(self):
        name = input("请输入姓名： \n")
        no = input("请输入学号： \n")

        age = input("请输入年龄： \n")
        sex = input("请输入性别：\n")
        stu = Student(name,no,age,sex,self.currentClass)
        self.currentClass.add_student(stu)
        print("添加成功")


    # 删除学生
    def del_student(self):
        no = input("请输入要删除学生的学号： \n")
        self.currentClass.del_student(no)


    # 改
    def edit_student(self):
        no = input("请输入要修改学生的学号： \n")
        isExistStu,stu,stuIndex =self.currentClass.edit_student(no)
        if(isExistStu):
            stuTemp = Student(stu.name, stu.no, stu.age, stu.sex, self.currentClass)
            while True:
                editStu = input("请选择修改内容,1: 姓名，2：学号， 3:年龄，4:性别, 0:完成, 88:返回 \n")
                if editStu == '1':
                    print("-----正在修改姓名-----")
                    name = input("请输入姓名：")
                    stuTemp.clsName = name
                elif editStu == '2':
                    print("-----正在修改学号-----")
                    no = input("请输入学号：")
                    stuTemp.clsNo = no
                elif editStu == '3':
                    print("-----正在修改年龄-----")
                    age = input("请输入年龄：")
                    stuTemp.age = age;
                elif editStu == '4':
                    print("-----正在修改性别-----")
                    sex = input("请输入性别：")
                    stuTemp.sex = sex
                elif editStu == '0' :
                    self.currentClass.stu_list[stuIndex]=stuTemp
                    print("修改成功！")
                    break
                elif editStu == '88':
                    del stuTemp
                    break
                else:
                    print("选择无效，重新选择")





    # 显示
    def show_all(self):
        print(f"------------------{self.currentClass.clsName}学生信息表-----------------------")
        print("学号    姓名    性别    年龄")
        for stu in self.currentClass.stu_list:
            print(f"{stu.no}    {stu.name}    {stu.sex}    {stu.age}")

    # 显示班级列表
    def show_class_list(self):
         print("班级名称    班级编号")
         for cls in self.class_list:
             print(f"{cls.clsName}       {cls.clsNo}")

    # 选择进入班级
    def select_class(self,clsNo):
        isExist = False;
        for cls in self.class_list:
            if clsNo== cls.clsNo:
                isExist = True
                self.currentClass = cls
                break

        if isExist == False:
                print("班级不存在，请查正后再输入！")
        return isExist;
    # 删除班级
    def del_class(self,clsNo):
        isExist = False;
        for cls in self.class_list:
            if clsNo == cls.clsNo:
                isExist = True
                self.class_list.remove(cls)
                break

        if isExist == False:
                print("班级不存在，请查正后再输入！")

    #编辑班级
    def edit_class(self,clsNo):
        isExist = False;
        for cls in self.class_list:
            if clsNo == cls.clsNo:
                isExist = True
                clsNameTemp = cls.clsName
                clsNoTemp =cls.clsNo
                while True:
                    editCls = input("请选择修改内容, 修改班级名称:1 ,  修改班级编号:2 \n")
                    if editCls == '1':
                      print(f"-----正在修改{cls.clsNo}的班级名称-----")
                      clsName =  input("请输入班级名称： ")
                      while self.isExistCls(clsName) and (clsNameTemp !=clsName):

                         print(f"-----正在修改{cls.clsNo}的班级名称-----")
                         clsName = input("请重新输入班级名称：")
                      cls.clsName=clsName
                      break
                    elif editCls == '2':
                       print(f"-----正在修改{cls.clsName}班级编号-----")
                       clsNo = input("请输入班级编号：")
                       while self.isExistCls(clsNo) and (clsNo !=clsNoTemp):
                           print(f"-----正在修改{cls.clsName}班级编号-----")
                           clsNo = input("请重新输入班级编号：")
                       cls.clsNo = clsNo;
                       break
                    else:
                        print("选择无效，重新选择")
                break
        if isExist == False:
                print("班级不存在，请查正后再输入！")










def run():
    sys = SysManger("学生管理系统")
    print(f"********************************************************* \n******************* 欢迎进入{sys.sysName} *******************\n*********************************************************")
    if len(sys.class_list)<1:
        print("----------------当前班级列表为空，请添加班级--------------")
        sys.add_class()
    while True:
        level_2 = False
        print("------------------------------------------------------------------------------")
        clsOption = input("请选择: 1.添加班级, 2.显示班级列表, 3.选择班级, 4.删除班级, 5.编辑班级 \n")
        if clsOption == '1':
            sys.add_class()
        elif clsOption == '2':
            sys.show_class_list()
        elif clsOption == '4':
            clsNo = input("请输入要删除的班级编号： ")
            sys.del_class(clsNo)
        elif clsOption == '5':
            clsNo = input("请输入要编辑的班级编号： ")
            sys.edit_class(clsNo)
        elif clsOption == '3':
            clsNo = input("请输入班级编号：  ")
            if sys.select_class(clsNo):
                level_2 =True
            while level_2:
                print("------------------------------------------------------------------------------")
                cz = input("请选择操作内容,  a.添加,  m.修改,  d.删除,  q.查询, s.显示, r.返回 \n")
                if cz.lower() == 'a':
                    sys.add_student()
                elif cz.lower() == 's':
                    sys.show_all()
                elif cz.lower() == 'd':
                    sys.del_student()
                elif cz.lower() == 'm':
                    sys.edit_student()
                elif cz.lower() == 'r':
                    level_2 = False;
                else:
                   print("选择无效，请重新选择")
        else:
            print("选择无效，请重新选择")



if __name__ == '__main__':
    run()




